Media Session APIã培åºè§£èª¬ãéçºè ãæ§ã ãªãã©ãããã©ãŒã ããã©ãŠã¶ã§ãOSãšé³å£°ã»æ ååçãã·ãŒã ã¬ã¹ã«çµ±åã§ããããã«ããŸãã
Media Session APIã®ç¿åŸïŒã¯ãã¹ãã©ãããã©ãŒã ã®ãªãŒãã£ãªã»ãããªå¶åŸ¡
Media Session APIã¯ãéçºè ããªãŒãã£ãªããããªã®åçã³ã³ãããŒã«ãåºç€ãšãªããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã©ãŠã¶ãšçµ±åã§ããããã«ããã匷åãªWeb APIã§ãããã®çµ±åã«ããããŠãŒã¶ãŒã¯ããã¯ç»é¢ãBluetoothããã€ã¹ãå°çšã®ã¡ãã£ã¢ã³ã³ãããŒã«ã€ã³ã¿ãŒãã§ãŒã¹ãªã©ãããŸããŸãªãœãŒã¹ããã¡ãã£ã¢åçãå¶åŸ¡ã§ããããè±ãã§äžè²«æ§ã®ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸãããŸãããã®èšäºã§ã¯ãMedia Session APIã®ã³ã¢ã³ã³ã»ãããå®è·µçãªå®è£ ãé«åºŠãªæ©èœã«ã€ããŠç¶²çŸ çã«è§£èª¬ããŸãã
Media Session APIãšã¯ïŒ
Media Session APIã¯ãWebããŒã¹ã®ã¡ãã£ã¢ãã¬ãŒã€ãŒãšãã¹ãOSã®ã¡ãã£ã¢å¶åŸ¡ã¡ã«ããºã ãšã®éã®ã®ã£ãããåãããã®ã§ããããããªããšãWebããŒã¹ã®ãªãŒãã£ãªã»ãããªãã¬ãŒã€ãŒã¯å€ç«ããŠåäœãããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã享åãããããªã·ã¹ãã ã¬ãã«ã®çµ±åãæ¬ ããŠããŸããŸããMedia Session APIã¯ãWebã¢ããªã±ãŒã·ã§ã³ã以äžã®ããšãè¡ãããã®æšæºåãããæ¹æ³ãæäŸããããšã§ããã®åé¡ã«å¯ŸåŠããŸãïŒ
- ã¡ã¿ããŒã¿ã®èšå®ïŒ çŸåšåçäžã®ã¡ãã£ã¢ã«é¢ããæ å ±ïŒã¿ã€ãã«ãã¢ãŒãã£ã¹ããã¢ã«ãã ãã¢ãŒãã¯ãŒã¯ãªã©ïŒã衚瀺ããŸãã
- åçã¢ã¯ã·ã§ã³ã®åŠçïŒ åçãäžæåæ¢ãæ©éããå·»ãæ»ããã·ãŒã¯ãšãã£ãã·ã¹ãã ã¬ãã«ã®åçã³ãã³ãã«å¿çããŸãã
- åçåäœã®ã«ã¹ã¿ãã€ãºïŒ ãã©ãã¯ã®è©äŸ¡ããã¬ã€ãªã¹ããžã®è¿œå ãªã©ãæšæºã»ãããè¶ ããã«ã¹ã¿ã ã¢ã¯ã·ã§ã³ãå®è£ ããŸãã
Media Session APIã䜿çšããã¡ãªããã¯æ°å€ããããŸããäž»ãªãã®ã¯ä»¥äžã®éãã§ãïŒ
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒ ãŠãŒã¶ãŒã¯ãã¡ãã£ã¢ãåçããŠãããŠã§ããµã€ããã¢ããªã±ãŒã·ã§ã³ã«é¢ä¿ãªãã奜ã¿ã®ã€ã³ã¿ãŒãã§ãŒã¹ããã¡ãã£ã¢åçãå¶åŸ¡ã§ããŸãã
- ã¢ã¯ã»ã·ããªãã£ã®åŒ·åïŒ é害ãæã€ãŠãŒã¶ãŒã¯ãã·ã¹ãã ã¬ãã«ã®ã¡ãã£ã¢ã³ã³ãããŒã«ã掻çšããŠãããã¢ã¯ã»ã¹ããããåçäœéšãåŸãããšãã§ããŸãã
- ã·ãŒã ã¬ã¹ãªçµ±åïŒ Webã¢ããªã±ãŒã·ã§ã³ããã€ãã£ãã¢ããªã±ãŒã·ã§ã³ã®ããã«æããããããäžè²«æ§ã®ããæŽç·ŽããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
- ã¯ãã¹ãã©ãããã©ãŒã äºææ§ïŒ Media Session APIã¯ãããŸããŸãªOSã®äž»èŠãªãã©ãŠã¶ã§ãµããŒããããŠãããç°ãªãããã€ã¹ã®ãŠãŒã¶ãŒã«äžè²«ããäœéšãä¿èšŒããŸãã
ã³ã¢ã³ã³ã»ãã
ã³ãŒãã«å ¥ãåã«ãMedia Session APIã®ã³ã¢ã³ã³ã»ãããçè§£ããããšãéèŠã§ãïŒ
1. `navigator.mediaSession`ãªããžã§ã¯ã
ããã¯Media Session APIãžã®ãšã³ããªãã€ã³ãã§ããã¡ãã£ã¢åçæ å ±ãšå¶åŸ¡ã管çããããã«äœ¿çšããã`MediaSession`ãªããžã§ã¯ããžã®ã¢ã¯ã»ã¹ãæäŸããŸãã
2. ã¡ã¿ããŒã¿
ã¡ã¿ããŒã¿ãšã¯ãçŸåšåçäžã®ã¡ãã£ã¢ã«é¢ããæ å ±ã®ããšã§ããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- ã¿ã€ãã«ïŒ ãã©ãã¯ãŸãã¯ãããªã®ã¿ã€ãã«ã
- ã¢ãŒãã£ã¹ãïŒ ãã©ãã¯ãæŒå¥ããŠããã¢ãŒãã£ã¹ããŸãã¯ãããªã®ç£ç£ã
- ã¢ã«ãã ïŒ ãã©ãã¯ãå±ããã¢ã«ãã ã
- ã¢ãŒãã¯ãŒã¯ïŒ ã¡ãã£ã¢ã衚ãç»åãéåžžã¯ã¢ã«ãã ã¢ãŒãããããªã®ãµã ãã€ã«ã
ã¡ã¿ããŒã¿ãèšå®ããããšã§ãOSã¯ã¡ãã£ã¢ã«é¢ããé¢é£æ å ±ã衚瀺ã§ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
3. ã¢ã¯ã·ã§ã³
ã¢ã¯ã·ã§ã³ãšã¯ããŠãŒã¶ãŒãã¡ãã£ã¢åçãå¶åŸ¡ããããã«çºè¡ã§ããã³ãã³ãã§ãããããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- åçïŒ åçãéå§ããŸãã
- äžæåæ¢ïŒ åçãäžæåæ¢ããŸãã
- å·»ãæ»ãïŒSeek BackwardïŒïŒ æå®ãããæéã ãåŸæ¹ã«ã¹ãããããŸãã
- æ©éãïŒSeek ForwardïŒïŒ æå®ãããæéã ãåæ¹ã«ã¹ãããããŸãã
- ã·ãŒã¯ïŒSeek ToïŒïŒ ã¡ãã£ã¢ã®ç¹å®ã®æç¹ã«ãžã£ã³ãããŸãã
- åæ¢ïŒ åçã忢ããŸãã
- åã®ãã©ãã¯ãžã¹ãããïŒ åã®ãã©ãã¯ã«ã¹ãããããŸãã
- 次ã®ãã©ãã¯ãžã¹ãããïŒ æ¬¡ã®ãã©ãã¯ã«ã¹ãããããŸãã
Media Session APIã䜿çšãããšããããã®ã¢ã¯ã·ã§ã³ã®ãã³ãã©ãå®çŸ©ã§ããã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã®ã³ãã³ãã«é©åã«å¿çã§ããããã«ãªããŸãã
Media Session APIã®å®è£ ïŒå®è·µã¬ã€ã
Webã¢ããªã±ãŒã·ã§ã³ã«Media Session APIãå®è£ ããæé ã远ã£ãŠã¿ãŸãããã
ã¹ããã1ïŒAPIãµããŒãã®ç¢ºèª
ãŸãããŠãŒã¶ãŒã®ãã©ãŠã¶ãMedia Session APIããµããŒãããŠãããã©ããã確èªããŸãïŒ
if ('mediaSession' in navigator) {
// Media Session API is supported
}
ã¹ããã2ïŒã¡ã¿ããŒã¿ã®èšå®
次ã«ãçŸåšåçäžã®ã¡ãã£ã¢ã®ã¡ã¿ããŒã¿ãèšå®ããŸããããã«ã¯éåžžãã¿ã€ãã«ãã¢ãŒãã£ã¹ããã¢ã«ãã ãã¢ãŒãã¯ãŒã¯ãå«ãŸããŸãïŒ
navigator.mediaSession.metadata = new MediaMetadata({
title: 'Song Title',
artist: 'Artist Name',
album: 'Album Name',
artwork: [
{ src: 'image/path/96x96.png', sizes: '96x96', type: 'image/png' },
{ src: 'image/path/128x128.png', sizes: '128x128', type: 'image/png' },
{ src: 'image/path/192x192.png', sizes: '192x192', type: 'image/png' },
{ src: 'image/path/256x256.png', sizes: '256x256', type: 'image/png' },
{ src: 'image/path/384x384.png', sizes: '384x384', type: 'image/png' },
{ src: 'image/path/512x512.png', sizes: '512x512', type: 'image/png' },
]
});
`MediaMetadata`ãªããžã§ã¯ãã䜿çšãããšãããŸããŸãªãµã€ãºãšã¿ã€ãã®ã¢ãŒãã¯ãŒã¯ãæå®ã§ããç°ãªãããã€ã¹ã§æé©ãªç»åã衚瀺ãããããã«ããŸãã
ã¹ããã3ïŒåçã¢ã¯ã·ã§ã³ã®åŠç
次ã«ããµããŒããããåçã¢ã¯ã·ã§ã³ã®ãã³ãã©ãç»é²ããŸããäŸãã°ã`play`ã¢ã¯ã·ã§ã³ãåŠçããã«ã¯ïŒ
navigator.mediaSession.setActionHandler('play', function() {
// Handle play action
audioElement.play();
});
åæ§ã«ã`pause`ã`seekbackward`ã`seekforward`ã`previoustrack`ã`nexttrack`ãªã©ã®ä»ã®ã¢ã¯ã·ã§ã³ãåŠçã§ããŸãïŒ
navigator.mediaSession.setActionHandler('pause', function() {
// Handle pause action
audioElement.pause();
});
navigator.mediaSession.setActionHandler('seekbackward', function(event) {
// Handle seek backward action
const seekTime = event.seekOffset || 10; // Default to 10 seconds
audioElement.currentTime = Math.max(0, audioElement.currentTime - seekTime);
});
navigator.mediaSession.setActionHandler('seekforward', function(event) {
// Handle seek forward action
const seekTime = event.seekOffset || 10; // Default to 10 seconds
audioElement.currentTime = Math.min(audioElement.duration, audioElement.currentTime + seekTime);
});
navigator.mediaSession.setActionHandler('previoustrack', function() {
// Handle previous track action
playPreviousTrack();
});
navigator.mediaSession.setActionHandler('nexttrack', function() {
// Handle next track action
playNextTrack();
});
éèŠãªæ³šæïŒ `seekbackward`ããã³`seekforward`ã¢ã¯ã·ã§ã³ã¯ããªãã·ã§ã³ã§ã€ãã³ããªããžã§ã¯ãã«`seekOffset`ïŒã·ãŒã¯ããç§æ°ã瀺ãïŒãåãåãããšãã§ããŸãã`seekOffset`ãæäŸãããªãå Žåã¯ã10ç§ãªã©ã®ããã©ã«ãå€ã䜿çšã§ããŸãã
ã¹ããã4ïŒãseektoãã¢ã¯ã·ã§ã³ã®åŠç
`seekto`ã¢ã¯ã·ã§ã³ã¯ããŠãŒã¶ãŒãã¡ãã£ã¢ã®ç¹å®ã®æç¹ã«ãžã£ã³ãã§ããããã«ããã®ã«ç¹ã«äŸ¿å©ã§ãããã®ã¢ã¯ã·ã§ã³ã¯ãã€ãã³ããªããžã§ã¯ãã«`seekTime`ããããã£ãæäŸããç®çã®åçæéã瀺ããŸãïŒ
navigator.mediaSession.setActionHandler('seekto', function(event) {
if (event.fastSeek && ('fastSeek' in audioElement)) {
audioElement.fastSeek(event.seekTime);
return;
}
audioElement.currentTime = event.seekTime;
});
ããã§ã¯ã`fastSeek`ããããã£ãã€ãã³ãã«ååšããaudioèŠçŽ ãããããµããŒãããŠãããã©ããã確èªããŠããŸããäž¡æ¹ãtrueã§ããã°`fastSeek`颿°ãåŒã³åºããããã§ãªããã°`currentTime`ããããã£ãèšå®ããŸãã
é«åºŠãªæ©èœãšèæ ®äºé
1. ãªã¢ãŒãåçã®åŠç
Media Session APIã¯ãChromecastãAirPlayãªã©ã®ãªã¢ãŒãããã€ã¹ã§ã®ã¡ãã£ã¢åçãå¶åŸ¡ããããã«äœ¿çšã§ããŸããããã«ã¯ãããããã®ãªã¢ãŒãåçAPIãšã®è¿œå ã®çµ±åãå¿ èŠã§ãã
2. ããã°ã¬ãã·ããŠã§ãã¢ããªïŒPWAïŒ
Media Session APIã¯ããã€ãã£ãã©ã€ã¯ãªã¡ãã£ã¢åçäœéšãæäŸã§ãããããç¹ã«PWAã«é©ããŠããŸããMedia Session APIãæŽ»çšããããšã§ãPWAã¯OSã®ã¡ãã£ã¢ã³ã³ãããŒã«ãšã·ãŒã ã¬ã¹ã«çµ±åããäžè²«æ§ã®ããçŽæçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸã§ããŸãã
3. ããã¯ã°ã©ãŠã³ãåç
ã¢ããªã±ãŒã·ã§ã³ãããã¯ã°ã©ãŠã³ãåçããµããŒãããŠããããšã確èªãããã©ãŠã¶ã®ã¿ãããã©ãŒã«ã¹ãããŠããªããšãã§ããŠãŒã¶ãŒããªãŒãã£ãªãèŽãç¶ãããããããªãèŠç¶ãããã§ããããã«ããŠãã ãããããã¯ã·ãŒã ã¬ã¹ãªã¡ãã£ã¢åçäœéšãæäŸããããã«äžå¯æ¬ ã§ãã
4. ãšã©ãŒåŠç
ã¡ãã£ã¢åçäžã«çºçããå¯èœæ§ã®ããåé¡ãé©åã«åŠçããããã«ãå ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŠãã ãããããã«ã¯ããããã¯ãŒã¯ãšã©ãŒããã³ãŒããšã©ãŒãäºæããªãäŸå€ã®åŠçãå«ãŸããŸãã
5. ããã€ã¹äºææ§
Media Session APIãæåŸ éãã«åäœããããšã確èªããããã«ãããŸããŸãªããã€ã¹ããã©ãŠã¶ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŠãã ãããããã€ã¹ã«ãã£ãŠAPIã®å®è£ ãç°ãªãå Žåãããããã培åºçã«ãã¹ãããããšãäžå¯æ¬ ã§ãã
äžçäžã®äºäŸ
ããã€ãã®åœéçãªé³æ¥œã¹ããªãŒãã³ã°ãµãŒãã¹ããããªãã©ãããã©ãŒã ã¯ãMedia Session APIã广çã«æŽ»çšããŠãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããŠããŸãã以äžã«ããã€ãã®äŸãæããŸãïŒ
- SpotifyïŒã¹ãŠã§ãŒãã³ïŒïŒ Spotifyã¯APIãæŽ»çšããŠããã¹ã¯ãããããã³ã¢ãã€ã«ããã€ã¹ã§æ²æ å ±ã衚瀺ããåçãå¶åŸ¡ããŸãããŠãŒã¶ãŒã¯è»ã®ããã·ã¥ããŒããã¹ããŒããŠã©ããããåçãå¶åŸ¡ã§ããŸãã
- DeezerïŒãã©ã³ã¹ïŒïŒ Deezerã¯OSã®ã¡ãã£ã¢ã³ã³ãããŒã«ãšã®ã·ãŒã ã¬ã¹ãªçµ±åãæäŸãããŠãŒã¶ãŒãããã€ã¹éã§é³æ¥œåçã管çã§ããããã«ããŸãã
- YouTubeïŒã¢ã¡ãªã«ïŒïŒ YouTubeã¯APIãå®è£ ããŠããŠãŒã¶ãŒãããã¯ç»é¢ãéç¥ã»ã³ã¿ãŒãããããªåçãå¶åŸ¡ã§ããããã«ããŠããŸãã
- TidalïŒãã«ãŠã§ãŒïŒïŒ Tidalã¯é«å¿ å®åºŠã®ãªãŒãã£ãªã¹ããªãŒãã³ã°ãæäŸããAPIãå©çšããŠããŸããŸãªãã©ãããã©ãŒã ã§äžè²«ãããªã¹ãã³ã°äœéšãä¿èšŒããŸãã
- JioSaavnïŒã€ã³ãïŒïŒ ã€ã³ãã§äººæ°ã®é³æ¥œã¹ããªãŒãã³ã°ã¢ããªã¯ãAPIã䜿çšããŠãèšå€§ãªå°åã®é³æ¥œã«ã¿ãã°ãæ±ããªãããããŒã«ã©ã€ãºãããã·ãŒã ã¬ã¹ãªäœéšããŠãŒã¶ãŒã«æäŸããŠããŸãã
ãããã®äŸã¯ãMedia Session APIãå®è£ ããããšã®äžççãªé©çšå¯èœæ§ãšå©ç¹ã瀺ããŠããŸãã
ãã¹ããã©ã¯ãã£ã¹
- å æ¬çãªã¡ã¿ããŒã¿ãæäŸããïŒ æ£ç¢ºã§å®å šãªã¡ã¿ããŒã¿ã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããããŠãŒã¶ãŒãã¡ãã£ã¢ãèå¥ãå¶åŸ¡ããããããŸãã
- é¢é£ãããã¹ãŠã®ã¢ã¯ã·ã§ã³ãå®è£ ããïŒ å®å šã§çŽæçãªå¶åŸ¡äœéšãæäŸããããã«ãé¢é£ãããã¹ãŠã®åçã¢ã¯ã·ã§ã³ããµããŒãããŸãã
- ãšã©ãŒãé©åã«åŠçããïŒ äºæããªãã¯ã©ãã·ã¥ãé²ãããŠãŒã¶ãŒã«æçãªãšã©ãŒã¡ãã»ãŒãžãæäŸããããã«ãå ç¢ãªãšã©ãŒãã³ããªã³ã°ãå®è£ ããŸãã
- 培åºçã«ãã¹ãããïŒ äºææ§ãšæé©ãªããã©ãŒãã³ã¹ã確ä¿ããããã«ãããŸããŸãªããã€ã¹ããã©ãŠã¶ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŸãã
- é©åãªã¢ãŒãã¯ãŒã¯ãµã€ãºã䜿çšããïŒ ç°ãªãããã€ã¹ã§æé©ãªç»åã衚瀺ãããããã«ãè€æ°ã®ãµã€ãºã®ã¢ãŒãã¯ãŒã¯ãæäŸããŸãã
äžè¬çãªåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
- ã¡ãã£ã¢ã³ã³ãããŒã«ã衚瀺ãããªãïŒ ã¡ã¿ããŒã¿ãæ£ããèšå®ãããåçã¢ã¯ã·ã§ã³ãé©åã«åŠçãããŠããããšã確èªããŠãã ããã
- åçã¢ã¯ã·ã§ã³ãæ©èœããªãïŒ åçã¢ã¯ã·ã§ã³ã®ãã³ãã©ãæ£ããå®è£ ããããªãŒãã£ãªãŸãã¯ãããªèŠçŽ ãé©åã«å¶åŸ¡ãããŠããããšã確èªããŠãã ããã
- ã¢ãŒãã¯ãŒã¯ãæ£ãã衚瀺ãããªãïŒ ã¢ãŒãã¯ãŒã¯ã®ãã¹ãšãµã€ãºãæå¹ã§ãç»åã«ã¢ã¯ã»ã¹ã§ããããšã確èªããŠãã ããã
- äºææ§ã®åé¡ïŒ äºææ§ã®åé¡ãç¹å®ããŠå¯ŸåŠããããã«ãç°ãªããã©ãŠã¶ãããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ããã¹ãããŠãã ããã
çµè«
Media Session APIã¯ãWebããŒã¹ã®ãªãŒãã£ãªããã³ãããªãã¬ãŒã€ãŒã®ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããã®åŒ·åãªããŒã«ã§ããOSããã©ãŠã¶ãšã·ãŒã ã¬ã¹ã«çµ±åããããšã§ãããè±ãã§äžè²«æ§ããããã¢ã¯ã»ã¹ããããã¡ãã£ã¢åçäœéšãæäŸããŸãããã®èšäºã§æŠèª¬ããã¬ã€ãã©ã€ã³ãšãã¹ããã©ã¯ãã£ã¹ã«åŸãããšã§ãéçºè ã¯Media Session APIã广çã«æŽ»çšããäžçäžã®èŠèŽè ã«åããŠé åçã§åŒã蟌ãŸããã¡ãã£ã¢ã¢ããªã±ãŒã·ã§ã³ãäœæã§ããŸãã
Media Session APIãä¿é²ããäžè²«ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã¯ããŠãŒã¶ãŒãšã³ã²ãŒãžã¡ã³ããšæºè¶³åºŠãå€§å¹ ã«åäžãããããšãã§ããŸããWebã¢ããªã±ãŒã·ã§ã³ããã€ãã£ãã¢ããªãšãŸããŸãç«¶åããäžã§ãMedia Session APIã®ãããªæè¡ãæ¡çšããããšã¯ããã¹ãŠã®ãã©ãããã©ãŒã ã§æŽç·Žããããããã§ãã·ã§ãã«ãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããããã«äžå¯æ¬ ã«ãªããŸãã